/*
201. 数字范围按位与
给定范围 [m,n]，其中 0 <= m <= n <= 2147483647，返回此范围内所有数字的按位与（包含m, n两端点）。

例如，给定范围 [5,7]，您应该返回 4。
*/

class Solution
{
public:
    int rangeBitwiseAnd(int m, int n)
    {
        if(n == m) return n;
        int ret = n & m;
        for(int i = n; ret > 0 && i > m; i = i & (i - 1)) {
            ret &= i;
        }
        return ret;
    }
};